// #!/usr/bin/env node

// import { Client } from '@modelcontextprotocol/sdk/client/index.js';
// import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';
// import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
// import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
// import {
//   CallToolRequestSchema,
//   CallToolResult,
//   ListToolsRequestSchema,
// } from '@modelcontextprotocol/sdk/types.js';
// import * as fs from 'fs';
// import * as path from 'path';

// let stdioMcpServer: McpServer | null = null;
// let mcpClient: Client | null = null;

// // Read configuration from stdio-config.json
// const loadConfig = () => {
//   try {
//     const configPath = path.join(__dirname, 'stdio-config.json');
//     const configData = fs.readFileSync(configPath, 'utf8');
//     return JSON.parse(configData);
//   } catch (error) {
//     console.error('Failed to load stdio-config.json:', error);
//     throw new Error('Configuration file stdio-config.json not found or invalid');
//   }
// };

// export const getStdioMcpServer = () => {
//   if (stdioMcpServer) {
//     return stdioMcpServer;
//   }
//   stdioMcpServer = new McpServer(
//     {
//       name: 'StdioChromeMcpServer',
//       version: '1.0.0',
//     },
//     {
//       capabilities: {
//         tools: {},
//       },
//     },
//   );

//   setupTools(stdioMcpServer);
//   return stdioMcpServer;
// };

// export const ensureMcpClient = async () => {
//   try {
//     if (mcpClient) {
//       const pingResult = await mcpClient.ping();
//       if (pingResult) {
//         return mcpClient;
//       }
//     }

//     const config = loadConfig();
//     mcpClient = new Client({ name: 'Mcp Chrome Proxy', version: '1.0.0' }, { capabilities: {} });
//     const transport = new StreamableHTTPClientTransport(new URL(config.url), {});
//     await mcpClient.connect(transport);
//     return mcpClient;
//   } catch (error) {
//     mcpClient?.close();
//     mcpClient = null;
//     console.error('Failed to connect to MCP server:', error);
//   }
// };

// const setupTools = (server: McpServer) => {
//   // List tools handler
//   server.server.setRequestHandler(ListToolsRequestSchema, () => {
//     const client = await ensureMcpClient();
//     if (!client) {
//       throw new Error('Failed to connect to MCP server');
//     }
//     const tools = await client.listTools();
//     console.log('tools', tools);
//     return { tools: tools.data };
//   });

//   // Call tool handler
//   server.server.setRequestHandler(CallToolRequestSchema, async (request) =>
//     handleToolCall(request.params.name, request.params.arguments || {}),
//   );
// };

// const handleToolCall = async (name: string, args: any): Promise<CallToolResult> => {
//   try {
//     const client = await ensureMcpClient();
//     if (!client) {
//       throw new Error('Failed to connect to MCP server');
//     }
//     const result = await client.callTool({ name, arguments: args }, undefined, {
//       timeout: 2 * 6 * 1000, // Default timeout of 2 minute
//     });
//     return result as CallToolResult;
//   } catch (error: any) {
//     return {
//       content: [
//         {
//           type: 'text',
//           text: `Error calling tool: ${error.message}`,
//         },
//       ],
//       isError: true,
//     };
//   }
// };

// async function main() {
//   const transport = new StdioServerTransport();
//   await getStdioMcpServer().connect(transport);
// }

// main().catch((error) => {
//   console.error('Fatal error Chrome MCP Server main():', error);
//   process.exit(1);
// });
